// 第 2 步：定义 SocketCfg 配置结构体

#pragma once

// step 1:
// 先写出头文件常用的 #pragma once、依赖的系统头文件、命名空间声明。这一步暂时只保留最基础的框架

#include <string>
#include <sstream>

namespace Common {

// step 2:
// 这个结构体封装创建 socket 所需的参数，同时提供 toString() 便于记录日志。
struct SocketCfg {
  std::string ip_;
  std::string iface_;
  int port_ = -1;
  bool is_udp_ = false;
  bool is_listening_ = false;
  bool needs_so_timestamp_ = false;

  auto toString() const {
    std::stringstream ss;
    ss << "SocketCfg[ip:" << ip_
       << " iface:" << iface_
       << " port:" << port_
       << " is_udp:" << is_udp_
       << " is_listening:" << is_listening_
       << " needs_SO_timestamp:" << needs_so_timestamp_
       << "]";
    return ss.str();
  }
};

} // namespace Common